Loading...
 

Metoda Eulera

Omówiliśmy kilka rodzajów RRZ rzędu pierwszego, których rozwiązania można uzyskać za pomocą procesu całkowania. Niestety, nawet jeśli ograniczymy się do RRZ rzędu pierwszego, to większości z nich nie jesteśmy w stanie rozwiązać poprzez ich całkowanie, co więcej, rozwiązania takich równań nie są funkcjami elementarnymi. Dlatego powinniśmy w dalszym ciągu omówić bardziej uniwersalne metody.

Rozpatrzmy parę \( x, y \), gdzie \( x \) jest zmienną niezależną, natomiast \( y \) jest pewną różniczkowalną funkcją zmiennej \( x. \) Zadamy sobie pytanie, co oznacza równość

\( y'=f(x,\,y). \)


Odpowiedź, którą już znamy, brzmi następująco: prawa strona równania zadaje w każdym punkcie \( (x_0,\,y_0) \) płaszczyzny fazowej wielkość pochodnej rozwiąznia \( y=\phi(x;\,C) \) przechodzącego przez ten punkt. Można to przeformułować jeszcze w taki sposób: prosta

\( y=(x-x_0)\,f(x_0,\,y_0)+y_0 \)

jest styczna do rozwiązania \( y=\phi(x;\,C) \) równania ( 1 ) spełniającego warunek początkowy \( y(x_0)=y_0. \) Rozwinięcie tego rozwiązania w szereg Taylora

(3)
\( y(x)=y_0+(x-x_0)\,f(x_0,\,y_0)+O(|x-x_0|^2) \)

pozwala wnioskować że "dokładne" rozwiązanie w małym otoczeniu punktu \( x_0 \) różni się od linii prostej ( 2 ), o wyraz który jest rzędu \( |x-x_0|^2 \). A więc, dokładne rozwiązanie można przybliżać odcinkami prostej postaci

(4)
\( y_k=(x-x_k)\,f(x_k,\,y_k)+y_k \)

gdzie \( (x_k,\,y_k), \quad k=0,1,.... \) - zbiór punktów leżących w pobliżu poszukiwanej krzywej. W poszukiwaniu takiego przybliżenia korzystamy z pojęcia pola kierunków, które można określić jako pole taz zwanych infinitezymalnych odcinków zadanych w każdym punkcie \( (x,\,y) \) za pomocą wzoru

(5)
\( (d\,x,\,d\,y)=d\,x\,\left(1,\,f(x,\,y)\right). \)

Obraz graficzny takiego pola kierunków można uzyskać w każdym z dostępnych pakietów matematyki komputerowej (MathCad, MathLab, Maple, Mathematica ). Tutaj i dalej będziemy przytaczać "orfografię" pakietu Mathematica. Zobrazujemy, dla przykładu, pole kierunków funkcji

\( f(x,\,y)=x-y. \)

Komórka 1.1.

\( \begin{array}{l}In[1]:=[Vector~FieldPlots']\\ f[x_{-},y_{-}]=x-y; \\ VF1=VectorFieldPlot[\{1,f[x,y]\},\{x,0,4\},\{y,-3,3\}, \\ Axes \to True, ScaleFunction \to (1\& ),AxesLabel\to \{x,y\}] \\ \end{array} \)


Wynikiem jest wykres pola kierunków przedstawiony na Rys. 1

Graficzna reprezentacja pola kierunków funkcji {OPENAGHMATHJAX()}f(x,\,y)=x-y{OPENAGHMATHJAX}
Rysunek 1: Graficzna reprezentacja pola kierunków funkcji \( f(x,\,y)=x-y \)



Na Rys. 2 przedstawione zostało pole kierunków z kilkoma rozwiązaniami dokładnymi równania

\( y'=x-y, \)

które dane są wzorem

(6)
\( y=C_0 e^{-x}+x-1. \)

Widać na nim wyraźnie, że pole kierunków jest styczne do rozwiązania w każdym punkcie.

Graficzna reprezentacja pola kierunków funkcji \(f(x,\,y)=x-y\) oraz rozwiązania dokładne (6) odpowiadające stałym całkowania \(C_0=4\), \(C_0=1\) oraz \(C_0=-4\)
Rysunek 2: Graficzna reprezentacja pola kierunków funkcji \(f(x,\,y)=x-y\) oraz rozwiązania dokładne (6) odpowiadające stałym całkowania \(C_0=4\), \(C_0=1\) oraz \(C_0=-4\)


Znajomość pola kierunków w celu konstrukcji przybliżonego rozwiązania równania różniczkowego wykorzystał po raz pierwszy Leonard Euler. Jego algorytm dotyczy poszukiwania rozwiązania przybliżonego zadadnienia Cauchyego

(7)
\( y'=f(x,\,y), \qquad y(x_0)=y_0. \)

Traktując stałe \( x_0, \,\,y_0 \) oraz funkcję \( f(x,\,y) \) jako znane wielkości, Euler zaproponował opis łamanej przybliżającej rozwiązanie na odcinku \( [a=x_0,\,b] \) w postaci następującego algorytmu:

\( \begin{array}{l}y_1=y_0+h\,f(x_0,\,y_0), \\ y_2=y_1+h\,f(x_1,\,y_1), \\ y_3=y_2+h\,f(x_2,\,y_2), \\ .......................... \\ y_{k+1}=y_k+h\,f(x_k,\,y_k), \\ ......................... \\ y_N=y_{N-1}+h\,f(x_{N-1},\,y_{N-1}), \\ \end{array} \)

gdzie \( h=\frac{b-a}{N} \).

Do tego, by przybliżenie dostatecznie dobrze opisywało poszukiwane rozwiązanie, należy stosować dostatecznie mały krok \( h \) (czyli duże \( N \)). Do zastosowania powyższego algorytmu, w zasadzie, wystarczy umieć posługiwać się kalkulatorem, jednak odpowiednie obliczenia są bardzo żmudne. Podamy, zgodnie z 1,

dwie wersje algorytmu Eulera, zaimplentowane w pakiecie Mathematica dla rozwiązywania zagadnienia początkowego
 

(8)
\( y'=x-y, \quad y(x_0)=0. \)

na odcinku \( (0,\,4) \) z krokiem \( h=0.2 \).

Prosty kod wygląda następująco:
Komórka 1.2.

\( \begin{array}{l} x[n_{-}]:=n h; \\ y[n_{-}]:=y[n-1]+hf[x[n-1],y[n-1]]/;n \gt 0 \&\& n \in Integers; \\ h=0.2; \\ y0=0; \\ f[x_{-}, y_{-}] = x - y; \\ \end{array} \)

Uwaga 1:


Warunki \( n \gt 0 \\ \) \( n \in Integers \) są potrzebne by uniknąć nieskończonej rekursji, która mogłaby powstać, jeżeli pozwolilibyśmy \( n \) przybierać dowolne (w tym również ujemne) wartości.


Jeżeli teraz dodać moduł
Komórka 1.3.

\( \begin{array}{l} sol=Table[\{x[n],\,y[n] \}, \{n,0,4/h \}],\end{array} \)

to otrzymamy poszukiwane przybliżone rozwiązanie w postaci tabelki.
Powyższy algorytm przy dużej liczbie iteracji \( N \) będzie pracować wolno, ponieważ przy każdej kolejnej liczbie \( n \) obliczenia rozpoczynają się od punktu \( y[0] \). Algorytm można jednak zmodyfikować w taki sposób że wielkości \( v[0],\,v[1],\,...v[n] \) będą zapamiętywane, co znacznie usprawni obliczenia. Kolejną rzeczą jest zastąpienie tabelki \( sol \) przez funkcję interpolacyjną \( vEul[t_{-}] = Interpolation[sol][t] \). Wszystko to razem wzięte tworzy następujący szybko działający algorytm:
Komórka 1.4.

\( \begin{array}{l}t[n_{-}] := n h; \\ v[n_{-}] := (v[n] = v[n - 1] + h f[t[n - 1], v[n - 1]]) /; n > 0 \&\& n \in Integers; \\ v[0] := v0; \\ h = 0.2; \\ f[t_{-}, v_{-}] = t - v; \\ v0 = 0; \\ sol = Table[\{t[n], v[n]\}, {n, 0, 4/h}]; \\ vEul[t_{-}] = Interpolation[sol][t] \\ vExact[t_{-}] = Exp[-t] + t - 1; \\ p1 = Plot[\{vEul[t], vExact[t]\}, \{t, 0, 4\}, PlotStyle \to \{\{Thick, Dashed\}, Black\}]\end{array} \)

Przybliżone rozwiązanie równania (2) uzyskane metodą Eulera (linia przerywana), na tle rozwiązania dokładnego (linia ciągła)
Rysunek 3: Przybliżone rozwiązanie równania (2) uzyskane metodą Eulera (linia przerywana), na tle rozwiązania dokładnego (linia ciągła)


W wyniku implementacji tego algorytmu uzyskujemy rozwiązanie przybliżone na tle rozwiązania dokładnego, co ilustruje Rys. 3.

Przypisy

1. D. Dubin, Numerical and Analytical Methods for Scientists and Enginneers Using Mathematica, John Wiley and Sons, New Jersey, 2003

 


Ostatnio zmieniona Poniedziałek 23 z Maj, 2022 13:22:38 UTC Autor: Vsevolod Vladimirov
Zaloguj się/Zarejestruj w OPEN AGH e-podręczniki
Czy masz już hasło?

Hasło powinno mieć przynajmniej 8 znaków, litery i cyfry oraz co najmniej jeden znak specjalny.

Przypominanie hasła

Wprowadź swój adres e-mail, abyśmy mogli przesłać Ci informację o nowym haśle.
Dziękujemy za rejestrację!
Na wskazany w rejestracji adres został wysłany e-mail z linkiem aktywacyjnym.
Wprowadzone hasło/login są błędne.